# Python 基本数据类型示例

print("=" * 50)
print("Python 基本数据类型")
print("""
1. 数字类型 (Number)：包括整数、浮点数、复数和布尔值
2. 字符串类型 (String)：单引号、双引号、三引号字符串及常用操作
3. 列表类型 (List)：可变序列类型及常用操作
4. 元组类型 (Tuple)：不可变序列类型及特点
5. 集合类型 (Set)：无序不重复元素集及集合运算
6. 字典类型 (Dictionary)：键值对数据结构及操作
7. 数据类型分类：可变与不可变类型的区别
8. 类型检查：如何检查变量的数据类型
9. 类型转换：不同类型之间的转换示例
""")
print("=" * 50)

# 1. 数字类型 (Number)
print("\n1. 数字类型 (Number)")
print("-" * 30)

# 整数类型
int_num = 42
print("整数:", int_num, type(int_num))

# 浮点数类型
float_num = 3.14159
print("浮点数:", float_num, type(float_num))

# 复数类型
complex_num = 3 + 4j
print("复数:", complex_num, type(complex_num))

# 布尔类型
bool_true = True
bool_false = False
print("布尔值 True:", bool_true, type(bool_true))
print("布尔值 False:", bool_false, type(bool_false))

# 2. 字符串类型 (String)
print("\n\n2. 字符串类型 (String)")
print("-" * 30)

# 单引号字符串
str1 = 'Hello'
print("单引号字符串:", str1)

# 双引号字符串
str2 = "World"
print("双引号字符串:", str2)

# 三引号字符串（多行）
str3 = """这是一个
多行
字符串"""
print("三引号字符串:", str3)

# 字符串索引和切片
text = "Python"
print("字符串 'Python' 的第一个字符:", text[0])
print("字符串 'Python' 的最后字符:", text[-1])
print("字符串 'Python' 的第2到第4个字符:", text[1:4])

# 字符串常用方法
print("转大写:", text.upper())
print("转小写:", text.lower())
print("查找子串 'th' 的位置:", text.find('th'))

# 3. 列表类型 (List)
print("\n\n3. 列表类型 (List)")
print("-" * 30)

# 创建列表
my_list = [1, 2, 3, 'Python', True]
print("列表:", my_list, type(my_list))

# 访问列表元素
print("列表第一个元素:", my_list[0])
print("列表最后一个元素:", my_list[-1])

# 修改列表元素
my_list[0] = 100
print("修改后的列表:", my_list)

# 列表常用方法
my_list.append('新元素')
print("添加元素后:", my_list)

my_list.remove('Python')
print("移除 'Python' 后:", my_list)

# 列表切片
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("数字列表:", numbers)
print("前5个元素:", numbers[:5])
print("后5个元素:", numbers[5:])
print("每隔一个元素:", numbers[::2])

# 4. 元组类型 (Tuple)
print("\n\n4. 元组类型 (Tuple)")
print("-" * 30)

# 创建元组
my_tuple = (1, 2, 3, 'Python', True)
print("元组:", my_tuple, type(my_tuple))

# 访问元组元素
print("元组第一个元素:", my_tuple[0])
print("元组最后一个元素:", my_tuple[-1])

# 元组不可修改（取消注释下面一行会报错）
# my_tuple[0] = 100  # TypeError: 'tuple' object does not support item assignment

# 单元素元组需要逗号
single_tuple = (42,)
print("单元素元组:", single_tuple, type(single_tuple))

# 5. 集合类型 (Set)
print("\n\n5. 集合类型 (Set)")
print("-" * 30)

# 创建集合
my_set = {1, 2, 3, 4, 5}
print("集合:", my_set, type(my_set))

# 集合会自动去重
duplicate_set = {1, 2, 2, 3, 3, 3}
print("自动去重的集合:", duplicate_set)

# 集合操作
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}

print("集合 A:", set_a)
print("集合 B:", set_b)
print("A 和 B 的交集:", set_a & set_b)
print("A 和 B 的并集:", set_a | set_b)
print("A 和 B 的差集:", set_a - set_b)

# 添加和移除元素
my_set.add(6)
print("添加元素 6 后:", my_set)

my_set.discard(1)
print("移除元素 1 后:", my_set)

# 6. 字典类型 (Dictionary)
print("\n\n6. 字典类型 (Dictionary)")
print("-" * 30)

# 创建字典
my_dict = {
    'name': 'Python',
    'age': 30,
    'is_cool': True
}
print("字典:", my_dict, type(my_dict))

# 访问字典元素
print("name 的值:", my_dict['name'])
print("使用 get() 方法获取 age:", my_dict.get('age'))

# 修改和添加字典元素
my_dict['age'] = 31
my_dict['version'] = 3.9
print("修改和添加元素后:", my_dict)

# 字典常用方法
print("所有键:", list(my_dict.keys()))
print("所有值:", list(my_dict.values()))
print("所有键值对:", list(my_dict.items()))

# 7. 数据类型分类
print("\n\n7. 数据类型分类")
print("-" * 30)

print("可变数据类型:")
print("- 列表 (List)")
print("- 字典 (Dictionary)")
print("- 集合 (Set)")

print("\n不可变数据类型:")
print("- 数字 (Number)")
print("- 字符串 (String)")
print("- 元组 (Tuple)")

# 8. 类型检查
print("\n\n8. 类型检查")
print("-" * 30)

sample_data = [42, 3.14, "Hello", [1, 2, 3], {"key": "value"}, (1, 2), {1, 2, 3}]
for data in sample_data:
    print(f"{str(data):<15} 类型: {type(data).__name__}")

# 9. 类型转换示例
print("\n\n9. 类型转换示例")
print("-" * 30)

# 字符串转数字
str_num = "123"
int_num = int(str_num)
print(f"'{str_num}' (str) 转换为 {int_num} ({type(int_num).__name__})")

# 数字转字符串
num = 456
str_from_num = str(num)
print(f"{num} ({type(num).__name__}) 转换为 '{str_from_num}' ({type(str_from_num).__name__})")

# 列表转元组
list_data = [1, 2, 3]
tuple_data = tuple(list_data)
print(f"{list_data} (list) 转换为 {tuple_data} ({type(tuple_data).__name__})")

print("\n" + "=" * 50)
print("基本数据类型示例结束")
print("=" * 50)
